/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package MiddleLayer;

/**
 *
 * @author ThanhTri
 * Kiễm tra luật và trạng thái bàn cờ trong game.
 */
public class GameRules {
    private boolean bIsHeartBroken = false;//kiểm tra xem được đi quân Cơ chưa hay không?
    private Card prevCardID = null;
    private Card currCard = null;

    /*
     * Kiểm tra nước đi xem có thỏa luật chơi không
     * Nếu người chơi được đi đầu trong lượt đi này
     */
    public boolean isLeadMovingValid(int cardIDWillPlay)
    {
        boolean result = false;
        //Nếu là bước đi đầu tiên: Hợp lệ khi chỉ là 2 chuồn
        if(this.prevCardID == null)
        {
            //kiểm tra có phải là 2 chuồn không
            if(Card.isTwoOfClubs(cardIDWillPlay))
            {
                result = true;
            }

            //Kiểm tra có phải là Q bích hay quân Cơ hay không: KHÔNG ĐƯỢC ĐI TRONG LẦN ĐẦU TIÊN
            if(Card.isQueenOfSpades(cardIDWillPlay))
            {
                result = false;
            }
            if(Card.isHeartCard(cardIDWillPlay))
            {
                result = false;
            }

        }
        else
        {
            //Nếu là quân Cơ, kiểm tra xem đã đi được chưa.
            if(Card.isHeartCard(cardIDWillPlay))
            {
                if(this.isHeartBroken())
                    result = true;
                else
                    result = false;
            }

        }

        if(result == true)
        {
            if(this.prevCardID == null)
                this.prevCardID = new Card(cardIDWillPlay);
            else
                this.prevCardID.setId(cardIDWillPlay);
        }

        return result;
    }

    /*
     * Kiểm tra nước đi xem có thỏa luật chơi không
     * Trường hợp người chơi không phải đi đầu mà chọn bài để ra
     */
    public boolean isMovingValid(int cardIDWillPlay, int iCardIDWasPlayByOtherPlayer, Cards lstHoldCard)
    {
        boolean result = false;


        //Kiểm tra xem có cùng loại không?
        if (Card.isSameSuit(cardIDWillPlay, iCardIDWasPlayByOtherPlayer))
            result = true;
        else//Kiểm tra trường hợp coi còn bài cũng loại này trong các lá bài giữ trong tay không
        {
            //Còn quân bài cùng loại trong tay
            if (lstHoldCard.stillHaveSameSuitCard(iCardIDWasPlayByOtherPlayer))
                result = false;
            else
            {
                //Trường hợp không còn, kiểm tra xem có đánh quân bài heart ko?
                if(Card.isHeartCard(cardIDWillPlay))
                    this.bIsHeartBroken = true;//Nếu có, heart broken
                result = true;
            }
        }


        if(result == true)
            this.prevCardID.setId(cardIDWillPlay);

        return result;
    }


    /*
     * trả về điểm số của người chơi
     */
    public int getMarkForPlayer(Cards lstWinCard)
    {
        return lstWinCard.getScore();
    }

    /**
     * @return the bIsHeartBroken
     */
    public boolean isHeartBroken() {
        return bIsHeartBroken;
    }

    /**
     * @param bIsHeartBroken the bIsHeartBroken to set
     */
    public void setHeartBroken() {
        this.bIsHeartBroken = true;
    }
}
